package cn.taobaoke.restful.controller;

import cn.taobaoke.restful.domain.OrderEntity;
import cn.taobaoke.restful.interceptor.Auth;
import cn.taobaoke.restful.service.OrderService;
import lombok.NonNull;
import lombok.RequiredArgsConstructor;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

/**
 * OrderController类.
 * +-----------------------------------------------------------------------------------------------+
 * |类名称: OrderController                                                                         |
 * |创建时间: 3/20/17                                                                               |
 * |功能简介:                                                                                       |
 * |参考链接:                                                                                       |
 * +-----------------------------------------------------------------------------------------------+
 *
 * @author luch
 */
@RestController
@RequestMapping(name = "/{domain}/{domainId}/api/orders")
@RequiredArgsConstructor(onConstructor = @__(@Autowired))
public class CommonOrderController extends BaseController {

    // TODO 1. 查询当前用户下的订单(管理员查看全部, 一级代理查看自己和手下的, 二级代理只能看自己的)

    @Auth(type = { Auth.AuthType.AGENT, Auth.AuthType.ADMIN })
    @PostMapping("")
    public Result addOrder(@PathVariable Long domainId, @PathVariable String domain, @RequestBody OrderEntity orderEntity) {
        logger.debug("添加订单操作: POST /{}/api/orders \n{}", domainId, orderEntity);
        OrderEntity entity = (OrderEntity) orderService.storeOrder(orderEntity, domainId, domain).getOrDefault(OrderService.ENTITY, null);
        return wrapObj(entity);
    }

    // TODO 2. 订单结算(管理员查看所有用户的,以及自己的. 一级代理查看自己和手下二级的. 二级代理只能看自己的)
    // NOTICE 1. 订单结算的时候,  管理员 拿去佣金 =   商品佣金( 1 - 15%) * ( 1 - 给推广提成比率 - 给二级代理对应的一级代理奖励提成比率)。  15%指的是阿里妈妈的技术服务费用抽成
    //  一级代理   第一情况,自己直接推广的商品    佣金 =  商品佣金( 1 - 15%) * 推广比率
    //            第二种情况, 二级代理帮推广的   佣金 =  商品佣金( 1- 15%) * 一级代理对二级代理推广抽成比例
    //  二级代理    佣金 = 商品佣金 * ( 1 - 15%) * 推广比率
    // NOTICE 2. 注意区间统计, 参数明天晚上给下

    private final @NonNull OrderService orderService;

    private static Logger logger = LogManager.getLogger(CommonOrderController.class);

}
